package Negocio;

import java.util.ArrayList;
import java.util.List;

import DTO.DTO_Area;
import DTO.DTO_Comanda;
import DTO.DTO_PedidoInsumo;
import Entities.Entity_Area;
import Entities.Entity_PedidoInsumo;

public abstract class Area {

	private int idArea;
	private DepositoArea depositoArea;
	private List<Comanda> comandas;
	private Encargado encargado;
	private List<PedidoInsumo> pedidoInsumos;
	private InformeReposicionArea informeReposicionArea;
	
	//CONSTRUCTOR
	public Area(int idArea, DepositoArea depositoArea, List<Comanda> comandas, Encargado encargado, List<PedidoInsumo> pedidoInsumos) {
		super();
		this.idArea = idArea;
		this.depositoArea = depositoArea;
		this.comandas = comandas;
		this.encargado = encargado;
		this.pedidoInsumos = pedidoInsumos;
	}
	
	public Area(DTO_Area area){
		this.idArea=area.getIdArea();

		this.depositoArea = new DepositoArea(area.getDepositoArea());
		
		this.encargado = new Encargado(area.getEncargado());
		List<Comanda> coms = null;
		for(DTO_Comanda comanda:area.getComandas())
		{
			coms.add(new Comanda(comanda));
		}
		this.comandas = coms;
		
		List<PedidoInsumo> pIs = null;
		for(DTO_PedidoInsumo pedidoInsumo:area.getPedidoInsumos())
		{
			pIs.add(new PedidoInsumo(pedidoInsumo));
		}
		this.pedidoInsumos = pIs;
		
	}
	
	public Area(Entity_Area area){
		this.idArea=area.getIdArea();

		this.depositoArea = new DepositoArea(area.getDepositoArea());
		
		this.encargado = new Encargado(area.getEncargado());
		List<Comanda> coms = null;
		/*for(Entity_Comanda comanda : area.getComandas())
		{
			coms.add(new Comanda(comanda));
		}
		this.comandas = coms;*/
		
		List<PedidoInsumo> pIs = null;
		for(Entity_PedidoInsumo pedidoInsumo: area.getPedidoInsumos())
		{
			pIs.add(new PedidoInsumo(pedidoInsumo));
		}
		this.pedidoInsumos = pIs;
		
	}

	public Area(){
		
	}
	
	//GET & SET
	public int getIdArea() {
		return idArea;
	}
	public List<Comanda> getComandas() {
		return comandas;
	}
	public void setComandas(List<Comanda> comandas) {
		this.comandas = comandas;
	}
	public List<PedidoInsumo> getPedidoInsumos() {
		return pedidoInsumos;
	}
	public void setPedidoInsumos(List<PedidoInsumo> pedidoInsumos) {
		this.pedidoInsumos = pedidoInsumos;
	}
	public void setIdArea(int idArea) {
		this.idArea = idArea;
	}
	public DepositoArea getDepositoArea() {
		return depositoArea;
	}
	public void setDepositoArea(DepositoArea depositoArea) {
		this.depositoArea = depositoArea;
	}
	public Encargado getEncargado() {
		return encargado;
	}
	public void setEncargado(Encargado encargado) {
		this.encargado = encargado;
	}

	public InformeReposicionArea getInformeReposicionArea() {
		return informeReposicionArea;
	}

	public void setInformeReposicionArea(InformeReposicionArea informeReposicionArea) {
		this.informeReposicionArea = informeReposicionArea;
	}
	
	//METODO DE NEGOCIO
	
	public DTO_Area toDTO(){
		DTO_Area a = new DTO_Area();
		a.setIdArea(this.idArea);
		a.setDepositoArea(this.depositoArea.toDTO());
		List<DTO_Comanda> aux_com = new ArrayList<DTO_Comanda>();
		for(Comanda e: this.comandas){
			aux_com.add(e.toDTO());
		}
		a.setComandas(aux_com);
		List<DTO_PedidoInsumo> aux_pi = new ArrayList<DTO_PedidoInsumo>();
		for(PedidoInsumo e: this.pedidoInsumos){
			aux_pi.add(e.toDTO());
		}
		a.setPedidoInsumos(aux_pi);
		return a;
	}
	
	public Entity_Area toEntity(){
		Entity_Area a = new Entity_Area();
		a.setIdArea(this.idArea);
		a.setDepositoArea(this.depositoArea.toEntity());
		/*List<Entity_Comanda> aux_com = new ArrayList<Entity_Comanda>();
		for(Comanda e: this.comandas){
			aux_com.add(e.toEntity());
		}
		a.setComandas(aux_com);*/
		List<Entity_PedidoInsumo> aux_pi = new ArrayList<Entity_PedidoInsumo>();
		for(PedidoInsumo e: this.pedidoInsumos){
			aux_pi.add(e.toEntity());
		}
		a.setPedidoInsumos(aux_pi);
		return a;
	}
	
	
	
	
	public InformeReposicionArea generarInformeReposicionArea()
	{
		for(StockInsumo si :depositoArea.getStockInsumo())
		{
			if(si.getPuntoReposicion()-si.getCant()>0)
				informeReposicionArea.agregarInsumoAReponer(new InsumoAReponer(si.getInsumo(),si.getPuntoReposicion()-si.getCant()));
		}
		return informeReposicionArea;
		
	}
}
